<?php

class Usuarios_DetalleController extends Zend_Controller_Action {
	
	private $tabs;
	private $nav;
	private $infoUsuario;
		
	public function init() {
		$sesionUsuario= new Zend_Session_Namespace("USUARIOS");
		$codusuario = $sesionUsuario->codusuario;
    	
		if(!empty($codusuario)) {
			$usuarios = new Usuarios_Model_Usuarios ( );
			$this->infoUsuario = $usuarios->cargarDatos ( $codusuario );
			$datos_ies = $usuarios->datosUsuarioSEDE($codusuario);
			$this->infoUsuario["justificacion"] = $datos_ies["justificacion"];
			$this->infoUsuario["tipousuario"] = $datos_ies["tipousuario"];
			$this->view->infoUsuario = $this->infoUsuario;
		}
		
		$this->tabs = new App_Util_Tabs ( );
		$this->tabs->agregar_vista ( "Información básica","/usuarios/detalle/basica" );
		if (!empty($codusuario)){
			$this->tabs->agregar_vista ( "Información cuenta","/usuarios/detalle/renovarclave" );
			if (App_User::getCodigoPadreRol()==Roles_Model_Roles::CODPADRE_ADMIN)
			    $this->tabs->agregar_vista ( "Perfiles y funcionalidades","/usuarios/detalle/perfil" );
			if (App_User::getCodigoPadreRol()==Roles_Model_Roles::CODPADRE_SEDE)
			    $this->tabs->agregar_vista ( "Asignar programas","/usuarios/detalle/asignarprogramas" );
		}else{
		    $this->tabs->agregar_vista ( "Información cuenta","#" );
			if (App_User::getCodigoPadreRol()==Roles_Model_Roles::CODPADRE_ADMIN)
			    $this->tabs->agregar_vista ( "Perfiles y funcionalidades","#" );
		}
		$this->view->tabs = $this->tabs;
		
		$this->nav = new App_Util_Navegacion();
		if (!$sesionUsuario->editarmiperfil){
		    $this->nav->agregar_navegacion("Lista de usuarios", "/usuarios/index/lista","Lista de usuarios");
		}
		$this->nav->agregar_navegacion("Información del usuario", "");
		$this->view->nav = $this->nav;
	}
	
	public function indexAction() {
		$this->_forward("lista");
	}

	public function basicaAction() {
		$this->tabs->actual( "Información básica" );
		$codusuario = $this->infoUsuario["codusuario"];
		
		//$autoCompleteUbicacion = new App_Util_AutoCompletar("/generales/ubicacion/autolista","ubicacion");
		//$this->view->autoCompleteUbicacion=$autoCompleteUbicacion;
				
		$form = new Usuarios_Form_Crear ( );
		$form->setAction ( $this->view->baseUrl("/usuarios/detalle/guardarusuario") );
	    
		$usuarios = new Usuarios_Model_Usuarios ( );
		
		if($this->getRequest()->isGet() && !empty( $codusuario )) {
			$ubicacion= new Generales_Model_Ubicaciongeografica();
			$datosubicacion= $ubicacion->cargarDatos($this->infoUsuario["codubicacion"]);
			$this->infoUsuario["ubicacion"]=$datosubicacion["nombreubicacion"];
			$form->populate($this->infoUsuario);
		}
        $form->recoverFromRedirect();
		$this->view->form = $form;
	}
	
	public function guardarusuarioAction(){
        $form = new Usuarios_Form_Crear ( );
        if($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())){
			try {
			    $datos = $form->getValues ();
			    
			    if (!isset($datos["estado"]) || empty($datos["estado"])) {
			        $datos["estado"] = 1;
			    }
			    $usuarios = new Usuarios_Model_Usuarios ( );
			    $key = $usuarios->guardarUsuario( $datos);
			    if (App_User::getCodigoSede()){
			        $domConfig = Zend_Registry::get('domConfig');
			        $codrol_insertar = $domConfig->ROL_SEDE;
			        if ($this->_getParam("tipousuario")=="L") $codrol_insertar = $domConfig->ROL_SOLOLECUTURASEDE;
			        if ($this->_getParam("tipousuario")=="R") $codrol_insertar = $domConfig->ROL_MODIFICARSEDE;
			        $usuarios->asignarRoles($key,array($codrol_insertar));
			        $datos_sede["codusuario"] = $key;
			        $datos_sede["codsede"] = App_User::getCodigoSede();
			        $datos_sede["justificacion"] = $this->_getParam("justificacion");
			        $datos_sede["tipousuario"] = $this->_getParam("tipousuario");
			        $usuarios->asignarUsuarioSEDE($datos_sede);
			    }
				$this->view->priorityMessenger("Los datos se han guardado correctamente", "success");
				
				$sesionUsuario = new Zend_Session_Namespace("USUARIOS");
	   			$sesionUsuario->codusuario = $key;
			} catch (Exception $e) {
				$this->view->priorityMessenger($e->getMessage(), "error");
			}
        } else {
            $form->setStateRedirect();
        }
        $this->_helper->redirector( "basica","detalle","usuarios");
    }
	
	
	public function renovarclaveAction() {
		$this->tabs->actual( "Información cuenta" );
		$form = new Usuarios_Form_RenovarClave();

		if($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {
			
				if($form->getValue("clave") != $form->getValue("reclave")) {
					$form->getElement("clave")->addError("Las claves no concuerdan");
				} else {
					try {
					    //echo $form->getValue("pregunta")."-->".$form->getValue("respuesta");
						$seguridad = new Usuarios_Model_Seguridad();
						$seguridad->actualizarClave($form->getValue("codusuario"), $form->getValue("clave"),
													$form->getValue("preguntasecreta"), $form->getValue("respuestasecreta"));
						
						$this->view->priorityMessenger("Los datos se han guardado correctamente", "success");
						
					} catch (Exception $e) {
						$this->view->priorityMessenger($e->getMessage(), 'error');
					}
				}
		} else {
			$form->populate ( $this->infoUsuario );
    		
		}
		$this->view->form = $form;
	}
	
	public function perfilAction(){
		$this->tabs->actual("Perfiles y funcionalidades");
		$codusuario = $this->infoUsuario["codusuario"];
		$Roles = new Roles_Model_Roles();
		$arregloTodosRoles=$Roles->getRolesPerfil();
		$arregloRolesReales=$Roles->getRolesPorUsuarioAsociativo($codusuario);
		$this->view->tabla=$Roles->roles_editar_usuarios_new($codusuario,$arregloTodosRoles,$arregloRolesReales);
	}
	
	public function asignarrolesusuarioAction(){
		$Usuarios= new Usuarios_Model_Usuarios();
		$codusuario = $this->infoUsuario["codusuario"];
		if ($this->getRequest()->isPost()) {
			$arregloRoles = $this->_getParam ( 'roles' );
			$Usuarios->asignarRoles($codusuario,$arregloRoles);
			//FIXME:Edwin>Implementar eliminacion permisos usuario institucion y verificar eliminacion y creacion perfilusuario_cna.
			/*
				if (!in_array($CONFIG["CODROL_INSTITUCION"],$arreglo_roles)){
					$gestor_usuarios->eliminar_permisos_usuario_institucion($cod_usuario);=>$cadena="DELETE FROM usuarioinstitucion WHERE codusuario=?";//usuariosies_cna
				}
				//Eliminar perfilusuario_cna y crearlo nuevamente con los roles que tiene asignado
				
			*/
			$this->view->priorityMessenger("Los datos se han guardado correctamente", "success");
			$this->_helper->redirector( "perfil","detalle","usuarios");
		}
	}
	
	public function perfilfuncionalAction(){
		$this->tabs->actual("Perfiles y funcionalidades");
		$codrol=$this->_getParam('codrol');
		$codusuario = $this->infoUsuario["codusuario"];
		$SeccionFuncional = new Roles_Model_Seccionfuncional();
		//$this->view->arreglo=$SeccionFuncional->getArreglo($codrol);
		$this->view->codrol=$codrol;
		$this->view->asignacionFuncionalidadesUsuario=$SeccionFuncional->asignacionFuncionalidadesUsuario($codrol,$codusuario);
	}
	
    public function asignarpermisosusuarioAction(){
		$Usuarios= new Usuarios_Model_Usuarios();
		$codusuario = $this->infoUsuario["codusuario"];
	    if ($this->getRequest()->isPost()) {
			$codrol = $this->_getParam ( 'codrol' );//Llega por POST a traves de un hidden
			$SeccionFuncional = new Roles_Model_Seccionfuncional();
			$Perfilrol 	= new Roles_Model_Perfilrol ( );
			$funcionalidadesOpcionesPorRol=$SeccionFuncional->getFuncionalidadesOpcionesPorRol($codrol);
			$acciones = array("ver","crear","modificar","eliminar");
			$arr_asignar = array();
			foreach ($funcionalidadesOpcionesPorRol as $codfunc) {
				foreach ($acciones as $accion) {
					$tmp = $this->_getParam("{$accion}_{$codfunc}");
					if (!empty($tmp)) {
						$arr_asignar[$codfunc][] = $accion;
					}
				}
			}
			//Zend_Debug::dump($codusuario);
			//Zend_Debug::dump($codrol);
			//Zend_Debug::dump($arr_asignar);
			try {
//				if (count($arr_asignar)==0) {
//					throw new Exception("Seleccione por lo menos un permiso a asignar");
//				}
				$Usuarios->guardarPermisosUsuario($codusuario,$arr_asignar);
				$this->view->priorityMessenger("Los datos se han guardado correctamente.", "success");
				$params=App_Util_SafeUrl::encriptar(array("codrol"=>$codrol,"codusuario"=>$codusuario));
				$this->_helper->redirector( "perfilfuncional","detalle","usuarios",$params);
			} catch (Exception $e) {
				$this->view->priorityMessenger($e->getMessage(),"error");
			}
		}
	}
	
	public function asignarprogramasAction() {
		$this->tabs->actual( "Asignar programas" );
		$Solicitudes = new Solicitudes_Model_DetalleSolicitud();
		$this->view->datos = $Solicitudes->getProgramasasginacionusuarioSEDE(App_User::getCodigoSede(), $this->infoUsuario["codusuario"]);
	}
	
	public function seleccionarprogramasAction() {
	    $this->_helper->layout()->disableLayout();
		$Solicitudes = new Solicitudes_Model_DetalleSolicitud();
		$this->view->datos = $Solicitudes->getProgramasasginacionusuarioSEDE(App_User::getCodigoSede(), $this->infoUsuario["codusuario"],2);
	}
	
    public function guardarasignarprogramasAction(){
		$Usuarios= new Usuarios_Model_Usuarios();
		$codusuario = $this->infoUsuario["codusuario"];
	    if ($this->getRequest()->isPost()) {
			$programas = $this->_getParam ( 'seleccionados' );//Llega por POST a traves de un hidden
			try {
				$Usuarios->guardarProgramasUsuario($codusuario,$programas);
				$this->view->priorityMessenger("Los datos se han guardado correctamente.", "success");
				$this->_helper->redirector( "asignarprogramas","detalle","usuarios");
			} catch (Exception $e) {
				$this->view->priorityMessenger($e->getMessage(),"error");
			}
		}
	}

	public function guardardesasignarprogramasAction(){
		$Usuarios= new Usuarios_Model_Usuarios();
		$codusuario = $this->infoUsuario["codusuario"];
	    if ($this->getRequest()->isPost()) {
			$programas = $this->_getParam ( 'seleccionados' );//Llega por POST a traves de un hidden
			try {
				$Usuarios->eliminarProgramasUsuario($codusuario,$programas);
				$this->view->priorityMessenger("Los datos se han guardado correctamente.", "success");
				$this->_helper->redirector( "asignarprogramas","detalle","usuarios");
			} catch (Exception $e) {
				$this->view->priorityMessenger($e->getMessage(),"error");
			}
		}
	}
	
}

